import { Point } from '@logicflow/core';
import type { Ref } from 'vue';

export interface MouseMapPoint {
  lat: number | string;
  lng: number | string;
  level?: number;
  [key: string]: any;
}

interface CommonMap {
  Map: any;
}

// 地图展示形式 modal 弹窗  tiled平铺
export type MapMode = 'modal' | 'tiled';

export interface MapConfig {
  // DOM
  el: Ref<HTMLElement> | null;
  // 初始化中心地图经度
  lng: string | number;
  // 初始化中心地图纬度
  lat: string | number;
  getClickPoint?: (val: MouseMapPoint) => void;
  getCurrentMarkItems?: (val: any) => void;
  // 地图点击事件名称
  addClick?: (val: any) => void;
  points?: LineProps[];
  lineStyle?: LineToolStyle;
  setCenterMarkItem?: boolean; //设置中心点标注
  level?: number; //地图初始化缩放等级
}

export interface MarkToolsConfig extends CommonMap {
  getCurrentMarkItems: (val: any) => void;
}
//此类表示地图上包含信息的窗口。
export interface InfoWindowOptions {
  content?: string;
  minWidth?: number;
  maxWidth?: number;
  maxHeight?: number;
  //是否开启信息窗口打开时地图自动移动（默认关闭）
  autoPan?: boolean;
  //控制弹出窗口中出现的关闭按钮。
  closeButton?: boolean;
  //弹出窗口位置的补偿值。在同一图层中打开弹出窗口时对于控制锚点比较有用。
  offset?: Point;
  //在地图视图自动平移产生后弹出窗口和地图视图之间的边缘。
  autoPanPadding?: Point;
  //是否开启点击地图关闭信息窗口（默认关闭）。
  closeOnClick?: boolean;
}
export interface InfoWindowObj {
  // 叠加层类型。
  getType: () => number;
  // 设置或改变信息浮窗所指向的地理位置坐标。
  setLngLat: (lnglat: MouseMapPoint) => void;
  // 设置信息浮窗显示时向右下角偏移量（像素）。 参数说明：point：偏移量（像素）。

  setOffset: (point: Point) => void;
  // 返回信息浮窗显示时向右下角偏移量
  getOffset: () => Point;
  //返回信息窗口的打开状态。
  isOpen: () => boolean;
  //设置信息浮窗的显示 HTML 内容。
  setContent: (content: string | HTMLElement) => void;
  //返回信息浮窗的显示 HTML 内容
  getContent: () => string | HTMLElement;
  //重绘信息窗口，当信息窗口内容发生变化时进行调用
  update: () => void;
  // 关闭浮窗
  closeInfoWindow: () => void;
  // 添加事件监听
  addEventListener: (event: string, handler: Fn) => void;
  // 移除事件监听
  removeEventListener: () => (event: string, handler: Fn) => void;
}

export interface LineProps {
  latitude: string;
  longitude: string;
  [key: string]: any;
}
type LineStyle = 'soild' | 'dashed';

// 说明查看 http://lbs.tianditu.gov.cn/api/js4.0/class.html
export interface LineToolStyle {
  color?: string;
  weight?: number;
  opacity?: number;
  lineStyle?: LineStyle;
  showLabel?: boolean;
  [key: string]: any;
}
export interface PolyLineToolProps extends CommonMap {
  lineStyle?: LineToolStyle;
}
